home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / ibus / setup / main.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-11-11  |  14.7 KB  |  340 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gettext
  5. import os
  6. import signal
  7. import sys
  8. import time
  9. import gtk
  10. import gobject
  11. import pango
  12. import ibus
  13. import keyboardshortcut
  14. from os import path
  15. from xdg import BaseDirectory
  16. from gtk import gdk
  17. from gtk import glade
  18. from enginecombobox import EngineComboBox
  19. from enginetreeview import EngineTreeView
  20. from engineabout import EngineAbout
  21.  
  22. _ = lambda a: gettext.dgettext('ibus', a)
  23.  
  24. N_ = lambda a: a
  25. (COLUMN_NAME, COLUMN_ENABLE, COLUMN_PRELOAD, COLUMN_VISIBLE, COLUMN_ICON, COLUMN_DATA) = range(6)
  26. (DATA_NAME, DATA_LOCAL_NAME, DATA_LANG, DATA_ICON, DATA_AUTHOR, DATA_CREDITS, DATA_EXEC, DATA_STARTED, DATA_PRELOAD) = range(9)
  27.  
  28. class Setup(object):
  29.     
  30.     def __flush_gtk_events(self):
  31.         while gtk.events_pending():
  32.             gtk.main_iteration()
  33.  
  34.     
  35.     def __init__(self):
  36.         super(Setup, self).__init__()
  37.         localedir = os.getenv('IBUS_LOCALEDIR')
  38.         gettext.bindtextdomain('ibus', localedir)
  39.         glade.bindtextdomain('ibus', localedir)
  40.         gettext.bind_textdomain_codeset('ibus', 'UTF-8')
  41.         glade.textdomain('ibus')
  42.         glade_file = path.join(path.dirname(__file__), './setup.glade')
  43.         self._Setup__xml = glade.XML(glade_file)
  44.         self._Setup__bus = None
  45.         self._Setup__init_bus()
  46.         self._Setup__init_ui()
  47.  
  48.     
  49.     def __init_ui(self):
  50.         self._Setup__window = self._Setup__xml.get_widget('window_preferences')
  51.         self._Setup__window.connect('delete-event', gtk.main_quit)
  52.         self._Setup__button_close = self._Setup__xml.get_widget('button_close')
  53.         self._Setup__button_close.connect('clicked', gtk.main_quit)
  54.         self._Setup__checkbutton_auto_start = self._Setup__xml.get_widget('checkbutton_auto_start')
  55.         self._Setup__checkbutton_auto_start.set_active(self._Setup__is_auto_start())
  56.         self._Setup__checkbutton_auto_start.connect('toggled', self._Setup__checkbutton_auto_start_toggled_cb)
  57.         self._Setup__config = self._Setup__bus.get_config()
  58.         shortcuts = self._Setup__config.get_value('general/hotkey', 'trigger', ibus.CONFIG_GENERAL_SHORTCUT_TRIGGER_DEFAULT)
  59.         button = self._Setup__xml.get_widget('button_trigger')
  60.         entry = self._Setup__xml.get_widget('entry_trigger')
  61.         text = '; '.join(shortcuts)
  62.         entry.set_text(text)
  63.         entry.set_tooltip_text(text)
  64.         button.connect('clicked', self._Setup__shortcut_button_clicked_cb, N_('trigger'), 'general/hotkey', 'trigger', entry)
  65.         shortcuts = self._Setup__config.get_value('general/hotkey', 'next_engine', ibus.CONFIG_GENERAL_SHORTCUT_NEXT_ENGINE_DEFAULT)
  66.         button = self._Setup__xml.get_widget('button_next_engine')
  67.         entry = self._Setup__xml.get_widget('entry_next_engine')
  68.         text = '; '.join(shortcuts)
  69.         entry.set_text(text)
  70.         entry.set_tooltip_text(text)
  71.         button.connect('clicked', self._Setup__shortcut_button_clicked_cb, N_('next input method'), 'general/hotkey', 'next_engine', entry)
  72.         shortcuts = self._Setup__config.get_value('general/hotkey', 'prev_engine', ibus.CONFIG_GENERAL_SHORTCUT_PREV_ENGINE_DEFAULT)
  73.         button = self._Setup__xml.get_widget('button_prev_engine')
  74.         entry = self._Setup__xml.get_widget('entry_prev_engine')
  75.         text = '; '.join(shortcuts)
  76.         entry.set_text(text)
  77.         entry.set_tooltip_text(text)
  78.         button.connect('clicked', self._Setup__shortcut_button_clicked_cb, N_('previous input method'), 'general/hotkey', 'prev_engine', entry)
  79.         self._Setup__combobox_lookup_table_orientation = self._Setup__xml.get_widget('combobox_lookup_table_orientation')
  80.         self._Setup__combobox_lookup_table_orientation.set_active(self._Setup__config.get_value('panel', 'lookup_table_orientation', 0))
  81.         self._Setup__combobox_lookup_table_orientation.connect('changed', self._Setup__combobox_lookup_table_orientation_changed_cb)
  82.         self._Setup__combobox_panel_show = self._Setup__xml.get_widget('combobox_panel_show')
  83.         self._Setup__combobox_panel_show.set_active(self._Setup__config.get_value('panel', 'show', 1))
  84.         self._Setup__combobox_panel_show.connect('changed', self._Setup__combobox_panel_show_changed_cb)
  85.         self._Setup__checkbutton_custom_font = self._Setup__xml.get_widget('checkbutton_custom_font')
  86.         self._Setup__checkbutton_custom_font.set_active(self._Setup__config.get_value('panel', 'use_custom_font', False))
  87.         self._Setup__checkbutton_custom_font.connect('toggled', self._Setup__checkbutton_custom_font_toggled_cb)
  88.         self._Setup__label_custom_font = self._Setup__xml.get_widget('label_custom_font')
  89.         self._Setup__fontbutton_custom_font = self._Setup__xml.get_widget('fontbutton_custom_font')
  90.         if self._Setup__config.get_value('panel', 'use_custom_font', False):
  91.             self._Setup__label_custom_font.set_sensitive(True)
  92.             self._Setup__fontbutton_custom_font.set_sensitive(True)
  93.         else:
  94.             self._Setup__label_custom_font.set_sensitive(False)
  95.             self._Setup__fontbutton_custom_font.set_sensitive(False)
  96.         font_name = gtk.settings_get_default().get_property('gtk-font-name')
  97.         font_name = unicode(font_name, 'utf-8')
  98.         font_name = self._Setup__config.get_value('panel', 'custom_font', font_name)
  99.         self._Setup__fontbutton_custom_font.connect('notify::font-name', self._Setup__fontbutton_custom_font_notify_cb)
  100.         self._Setup__fontbutton_custom_font.set_font_name(font_name)
  101.         self._Setup__checkbutton_show_im_name = self._Setup__xml.get_widget('checkbutton_show_im_name')
  102.         self._Setup__checkbutton_show_im_name.set_active(self._Setup__config.get_value('panel', 'show_im_name', False))
  103.         self._Setup__checkbutton_show_im_name.connect('toggled', self._Setup__checkbutton_show_im_name_toggled_cb)
  104.         self._Setup__checkbutton_use_sys_layout = self._Setup__xml.get_widget('checkbutton_use_sys_layout')
  105.         self._Setup__checkbutton_use_sys_layout.set_active(self._Setup__config.get_value('general', 'use_system_keyboard_layout', False))
  106.         self._Setup__checkbutton_use_sys_layout.connect('toggled', self._Setup__checkbutton_use_sys_layout_toggled_cb)
  107.         self._Setup__engines = self._Setup__bus.list_engines()
  108.         self._Setup__combobox = EngineComboBox(self._Setup__engines)
  109.         self._Setup__combobox.show()
  110.         self._Setup__xml.get_widget('alignment_engine_combobox').add(self._Setup__combobox)
  111.         tmp_dict = { }
  112.         for e in self._Setup__engines:
  113.             tmp_dict[e.name] = e
  114.         
  115.         engine_names = self._Setup__config.get_value('general', 'preload_engines', [])
  116.         engines = []
  117.         for n in engine_names:
  118.             if n in tmp_dict:
  119.                 engines.append(tmp_dict[n])
  120.                 continue
  121.         
  122.         self._Setup__treeview = EngineTreeView(engines)
  123.         self._Setup__treeview.show()
  124.         self._Setup__xml.get_widget('scrolledwindow_engine_treeview').add(self._Setup__treeview)
  125.         self._Setup__treeview.connect('changed', self._Setup__treeview_changed_cb)
  126.         button = self._Setup__xml.get_widget('button_engine_add')
  127.         button.connect(('clicked',), (lambda : self._Setup__treeview.append_engine(self._Setup__combobox.get_active_engine())))
  128.         button = self._Setup__xml.get_widget('button_engine_remove')
  129.         button.connect(('clicked',), (lambda : self._Setup__treeview.remove_engine()))
  130.         button = self._Setup__xml.get_widget('button_engine_up')
  131.         button.connect(('clicked',), (lambda : self._Setup__treeview.move_up_engine()))
  132.         button = self._Setup__xml.get_widget('button_engine_down')
  133.         button.connect(('clicked',), (lambda : self._Setup__treeview.move_down_engine()))
  134.         button = self._Setup__xml.get_widget('button_engine_about')
  135.         button.connect('clicked', self._Setup__button_engine_about_cb)
  136.  
  137.     
  138.     def __button_engine_about_cb(self, button):
  139.         engine = self._Setup__treeview.get_select_engine()
  140.         if engine:
  141.             about = EngineAbout(engine)
  142.             about.run()
  143.             about.destroy()
  144.         
  145.  
  146.     
  147.     def __treeview_changed_cb(self, treeview):
  148.         engines = self._Setup__treeview.get_engines()
  149.         engine_names = map((lambda e: e.name), engines)
  150.         self._Setup__config.set_list('general', 'preload_engines', engine_names, 's')
  151.  
  152.     
  153.     def __init_bus(self):
  154.         
  155.         try:
  156.             self._Setup__bus = ibus.Bus()
  157.         except:
  158.             while self._Setup__bus == None:
  159.                 message = _('IBus daemon is not started. Do you want to start it now?')
  160.                 dlg = gtk.MessageDialog(type = gtk.MESSAGE_QUESTION, buttons = gtk.BUTTONS_YES_NO, message_format = message)
  161.                 id = dlg.run()
  162.                 dlg.destroy()
  163.                 self._Setup__flush_gtk_events()
  164.                 if id != gtk.RESPONSE_YES:
  165.                     sys.exit(0)
  166.                 
  167.                 pid = os.spawnlp(os.P_NOWAIT, 'ibus-daemon', 'ibus-daemon')
  168.                 time.sleep(1)
  169.                 
  170.                 try:
  171.                     self._Setup__bus = ibus.Bus()
  172.                 except:
  173.                     continue
  174.  
  175.                 message = _('IBus has been started! If you can not use IBus, please add below lines in $HOME/.bashrc, and relogin your desktop.\n  export GTK_IM_MODULE=ibus\n  export XMODIFIERS=@im=ibus\n  export QT_IM_MODULE=ibus')
  176.                 dlg = gtk.MessageDialog(type = gtk.MESSAGE_INFO, buttons = gtk.BUTTONS_OK, message_format = message)
  177.                 id = dlg.run()
  178.                 dlg.destroy()
  179.                 self._Setup__flush_gtk_events()
  180.  
  181.  
  182.     
  183.     def __shortcut_button_clicked_cb(self, button, name, section, _name, entry):
  184.         buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK)
  185.         title = _('Select keyboard shortcut for %s') % _(name)
  186.         dialog = keyboardshortcut.KeyboardShortcutSelectionDialog(buttons = buttons, title = title)
  187.         text = entry.get_text()
  188.         if text:
  189.             shortcuts = text.split('; ')
  190.         else:
  191.             shortcuts = None
  192.         dialog.set_shortcuts(shortcuts)
  193.         id = dialog.run()
  194.         shortcuts = dialog.get_shortcuts()
  195.         dialog.destroy()
  196.         if id != gtk.RESPONSE_OK:
  197.             return None
  198.         self._Setup__config.set_list(section, _name, shortcuts, 's')
  199.         text = '; '.join(shortcuts)
  200.         entry.set_text(text)
  201.         entry.set_tooltip_text(text)
  202.  
  203.     
  204.     def __item_started_column_toggled_cb(self, cell, path_str, model):
  205.         iter = model.get_iter_from_string(path_str)
  206.         data = model.get_value(iter, COLUMN_DATA)
  207.         if data[DATA_STARTED] == False:
  208.             
  209.             try:
  210.                 self._Setup__bus.register_start_engine(data[DATA_LANG], data[DATA_NAME])
  211.             except Exception:
  212.                 e = None
  213.                 dlg = gtk.MessageDialog(type = gtk.MESSAGE_ERROR, buttons = gtk.BUTTONS_CLOSE, message_format = str(e))
  214.                 dlg.run()
  215.                 dlg.destroy()
  216.                 self._Setup__flush_gtk_events()
  217.                 return None
  218.             
  219.  
  220.         None<EXCEPTION MATCH>Exception
  221.         
  222.         try:
  223.             self._Setup__bus.register_stop_engine(data[DATA_LANG], data[DATA_NAME])
  224.         except Exception:
  225.             e = None
  226.             dlg = gtk.MessageDialog(type = gtk.MESSAGE_ERROR, buttons = gtk.BUTTONS_CLOSE, message_format = str(e))
  227.             dlg.run()
  228.             dlg.destroy()
  229.             self._Setup__flush_gtk_events()
  230.             return None
  231.  
  232.         data[DATA_STARTED] = not data[DATA_STARTED]
  233.         model.set(iter, COLUMN_ENABLE, data[DATA_STARTED])
  234.  
  235.     
  236.     def __item_preload_column_toggled_cb(self, cell, path_str, model):
  237.         iter = model.get_iter_from_string(path_str)
  238.         data = model.get_value(iter, COLUMN_DATA)
  239.         data[DATA_PRELOAD] = not data[DATA_PRELOAD]
  240.         engine = '%s:%s' % (data[DATA_LANG], data[DATA_NAME])
  241.         if data[DATA_PRELOAD]:
  242.             if engine not in self._Setup__preload_engines:
  243.                 self._Setup__preload_engines.add(engine)
  244.                 self._Setup__config.set_list('general', 'preload_engines', list(self._Setup__preload_engines), 's')
  245.             
  246.         elif engine in self._Setup__preload_engines:
  247.             self._Setup__preload_engines.remove(engine)
  248.             self._Setup__config.set_list('general', 'preload_engines', list(self._Setup__preload_engines), 's')
  249.         
  250.         model.set(iter, COLUMN_PRELOAD, data[DATA_PRELOAD])
  251.  
  252.     
  253.     def __is_auto_start(self):
  254.         link_file = path.join(BaseDirectory.xdg_config_home, 'autostart/ibus.desktop')
  255.         ibus_desktop = path.join(os.getenv('IBUS_PREFIX'), 'share/applications/ibus.desktop')
  256.         if not path.exists(link_file):
  257.             return False
  258.         if not path.islink(link_file):
  259.             return False
  260.         if path.realpath(link_file) != ibus_desktop:
  261.             return False
  262.         return True
  263.  
  264.     
  265.     def __checkbutton_auto_start_toggled_cb(self, button):
  266.         auto_start_dir = path.join(BaseDirectory.xdg_config_home, 'autostart')
  267.         if not path.isdir(auto_start_dir):
  268.             os.makedirs(auto_start_dir)
  269.         
  270.         link_file = path.join(BaseDirectory.xdg_config_home, 'autostart/ibus.desktop')
  271.         ibus_desktop = path.join(os.getenv('IBUS_PREFIX'), 'share/applications/ibus.desktop')
  272.         
  273.         try:
  274.             os.unlink(link_file)
  275.         except:
  276.             pass
  277.  
  278.         if self._Setup__checkbutton_auto_start.get_active():
  279.             os.symlink(ibus_desktop, link_file)
  280.         
  281.  
  282.     
  283.     def __combobox_lookup_table_orientation_changed_cb(self, combobox):
  284.         self._Setup__config.set_value('panel', 'lookup_table_orientation', self._Setup__combobox_lookup_table_orientation.get_active())
  285.  
  286.     
  287.     def __combobox_panel_show_changed_cb(self, combobox):
  288.         self._Setup__config.set_value('panel', 'show', self._Setup__combobox_panel_show.get_active())
  289.  
  290.     
  291.     def __checkbutton_custom_font_toggled_cb(self, button):
  292.         if self._Setup__checkbutton_custom_font.get_active():
  293.             self._Setup__label_custom_font.set_sensitive(True)
  294.             self._Setup__fontbutton_custom_font.set_sensitive(True)
  295.             self._Setup__config.set_value('panel', 'use_custom_font', True)
  296.         else:
  297.             self._Setup__label_custom_font.set_sensitive(False)
  298.             self._Setup__fontbutton_custom_font.set_sensitive(False)
  299.             self._Setup__config.set_value('panel', 'use_custom_font', False)
  300.  
  301.     
  302.     def __fontbutton_custom_font_notify_cb(self, button, arg):
  303.         font_name = self._Setup__fontbutton_custom_font.get_font_name()
  304.         font_name = unicode(font_name, 'utf-8')
  305.         self._Setup__config.set_value('panel', 'custom_font', font_name)
  306.  
  307.     
  308.     def __checkbutton_show_im_name_toggled_cb(self, button):
  309.         value = self._Setup__checkbutton_show_im_name.get_active()
  310.         self._Setup__config.set_value('panel', 'show_im_name', value)
  311.  
  312.     
  313.     def __checkbutton_use_sys_layout_toggled_cb(self, button):
  314.         value = self._Setup__checkbutton_use_sys_layout.get_active()
  315.         self._Setup__config.set_value('general', 'use_system_keyboard_layout', value)
  316.  
  317.     
  318.     def __config_value_changed_cb(self, bus, section, name, value):
  319.         pass
  320.  
  321.     
  322.     def __config_reloaded_cb(self, bus):
  323.         pass
  324.  
  325.     
  326.     def __sigusr1_cb(self, *args):
  327.         self._Setup__window.present()
  328.  
  329.     
  330.     def run(self):
  331.         self._Setup__window.show_all()
  332.         signal.signal(signal.SIGUSR1, self._Setup__sigusr1_cb)
  333.         gtk.main()
  334.  
  335.  
  336. if __name__ == '__main__':
  337.     setup = Setup()
  338.     setup.run()
  339.  
  340.